package  main.java.leetcode.editor.cn;
//2022-04-09 20:22:20
//给定一个字符串 s ，验证 s 是否是 回文串 ，只考虑字母和数字字符，可以忽略字母的大小写。 
//
// 本题中，将空字符串定义为有效的 回文串 。 
//
// 
//
// 示例 1: 
//
// 
//输入: s = "A man, a plan, a canal: Panama"
//输出: true
//解释："amanaplanacanalpanama" 是回文串 
//
// 示例 2: 
//
// 
//输入: s = "race a car"
//输出: false
//解释："raceacar" 不是回文串 
//
// 
//
// 提示： 
//
// 
// 1 <= s.length <= 2 * 105 
// 字符串 s 由 ASCII 字符组成 
// 
//
// 
//
// 注意：本题与主站 125 题相同： https://leetcode-cn.com/problems/valid-palindrome/ 
// Related Topics 双指针 字符串 
// 👍 20 👎 0

import java.util.Locale;

class XltzEq {
    public static void main(String[] args) {
        //创建该题目的对象方便调用
        Solution solution = new XltzEq().new Solution();
    }
    //leetcode submit region begin(Prohibit modification and deletion)
class Solution {
    public boolean isPalindrome(String s) {

        //检查数据是否有效
        int count = 0;
        int count1 = 0;
        for(int i = 0;i<s.length();i++){
            if(!Character.isLetterOrDigit(s.charAt(i))){
                count1++;
            }else {
                count++;
            }
        }
        if(count==0 && count1>0){
            return true;
        }
        int left = 0;
        int right = s.length()-1;
        String t = s.toLowerCase();
        while (left<=right){
            while (!Character.isLetterOrDigit(t.charAt(left))){
                left++;
            }
            while (!Character.isLetterOrDigit(t.charAt(right))){
                right--;
            }
            if(t.charAt(left) != t.charAt(right)){
                return false;
            }
            left++;
            right--;
        }
        return true;
    }
}
//leetcode submit region end(Prohibit modification and deletion)

}
